package com.Spring.Service;

import com.Spring.DAO.AlumnoDAO;
import com.Spring.DAO.GrupoDAO;
import com.Spring.DAO.InscripcionDAO;
import com.Spring.Model.Alumno;
import com.Spring.Model.Grupo;
import com.Spring.Model.GrupoPK;
import com.Spring.Service.Service;
import com.Spring.Model.Inscripcion;
import java.io.Serializable;
import java.util.List;


public class ProcesosAlumno implements Serializable {
    
    public String validar(Alumno alu) throws Exception{                         //Inicia Metodo para Validar los datos de Acceso al Usuario
       AlumnoDAO ad=new AlumnoDAO();
       ValidaCampos vc=new ValidaCampos();
       Alumno albd = ad.read(alu.getNoCuenta());                                //Se Lee  el No de Cuenta dado desde el navegador 
       if(albd==null)                                                           //Primero Verificamos que exista en la B.D.
           return "Usuario no registrado";                                                           //De no existir los datos (null) mostraremos mensaje: No existe el Alumno
       //if (vc.cuenta(alu.getNoCuenta())!=false)
          // return"El número de cuenta contiene 9 digitos sin guiones ni espacios";
      // if (vc.password(alu.getPasswordAlu())!=false)
           //return"La contraseña debe tener 8 digitos";
       if((int)albd.getNoCuenta()==(int)alu.getNoCuenta() )                               //Despues Verificamos que el No. de Cuenta coincida con el No. Cuenta de la B.D.
            if(albd.getPasswordAlu().equals(alu.getPasswordAlu()))              //De igual manera Verificamos la contraseña con la B.D
                return "Exito";                                                 //Una vez verificados los datos lo direccionamos a la pagina de Altas
            else        
                return "Datos incorrectos";                                                      //En caso de no coincidir la contraseña se mostrara un mensaje de error: Contraseña Erronea
       else
       return ("Datos incorrectos");                                                               //En caso de no coincidir el No. de cuenta se mostrara un mensaje de erorr: No. de Cuenta Erronea
    }//Termina Metodo para Validar los datos de Acceso al Usuario
    
    public String Alta (Alumno alu, GrupoPK pk) throws Exception{      //Inicia Metodo para dar de Alta al Usuario
      GrupoDAO gd=new GrupoDAO();
      InscripcionDAO id=new InscripcionDAO();
      Inscripcion ins= new Inscripcion();
        Grupo grbd=gd.read(pk);                          //se obtiene a un alumno de la base con pk
      if(grbd == null)                           //si es nulo no existe el alumno
          return "El Grupo no existe";                             //regresa mensaje contraseña o nocuenta erroneo
      if(grbd.getVacantes()==0)                  //verifica si hay vacantes
          return "No hay vacantes";                             //De no haber lugares se regresa un mensaje no hay vacantes
      if(id.validaInscripcion(alu.getNoCuenta(),pk.getIdAsignatura()) != -1 ) //Verificamos los datos con la tabla de Inscripciones
          //Si es diferente a -1, significa que ya la tiene inscrita
          return "Ya inscribiste esta materia"; //Mensaje: Ya esta Inscrita la Materia
      //Como no esta inscrita...
      ins.setIdAsignatura(pk.getIdAsignatura()); //Se manda la Asignatura a inscripciones
      ins.setIdGrupo(pk.getNumeroGrupo());           //Se manda el Grupo a Inscripciones
      ins.setNoCuenta(alu.getNoCuenta());         //Se manda el No. de Cuenta del Alumno Inscrito en la Asignatura a Inscripciones
      id.create(ins);                // Se registra la Inscripcion en la Tabla de Inscripciones de la B.D
      //int vaca =grbd.getVacantes();    //Obtenemos de la B.D. las vacantes de la Asignatura
      //vaca=vaca-1;                     //Disminuimos 1 vacante
      grbd.setVacantes((int)grbd.getVacantes()-1);          //Mandamos las nuevas vacantes al Grupo de la Asignatura
      gd.update(grbd);                 //Se registran las nuevas vacantes en el Grupo de la B.D
           
      return "Exito";
  } //Termina Metodo para dar de Alta al Usuario
  
  public String Baja (Alumno alu, GrupoPK pk) throws Exception{   //Inicia Metodo para dar de Baja al Usuario
      GrupoDAO dg=new GrupoDAO();
      InscripcionDAO dins=new InscripcionDAO();
      Grupo grbd=dg.read(pk);                               //Se obtiene a un alumno de la base con pk
      if(grbd == null)          //Primero Verificamos que exista el Alumno en la B.D.
          return "El grupo no existe";            //De no existir los datos (null) mostraremos mensaje error: No existe el Alumno
   if(dins.validaInscripcion(alu.getNoCuenta(),pk.getIdAsignatura())==-1)
           return"No la has dado de alta";
   else {                                //Verificamos que este inscrito en la tabla de Inscripciones
   dins.delete(dins.validaInscripcion(alu.getNoCuenta(),pk.getIdAsignatura()));    //Se manda el numero id de la inscripcion  al metodo y se procede a dar de Baja la Asignatura
   grbd.setVacantes((int)grbd.getVacantes()+1); //Se obtienen las vacantes, se suma 1 y mandamos las nuevas vacantes a la  B.D. de la Asignatura 
   dg.update(grbd); //Se registran las nuevas vacantes en el Grupo de la B.D
     return "Exito";
   }
  }//Termina Metodo para dar de Baja al Usuario
  
    public List<Inscripcion> ConsultaInscripcion (Alumno alu) throws Exception{ //Inicia Metodo para Consultar una Iscripcion del Usuario
        InscripcionDAO dins=new InscripcionDAO();
        return dins.busca(alu.getNoCuenta());//Se manda el No. de cuenta a Inscripcion para buscar en las Inscripciones realizadas
     }
    
     public String Cambio (Alumno alu,GrupoPK pk) throws Exception{ //Inicia Metodo para Cambiar una Asignatura del Usuario
        GrupoDAO dg=new GrupoDAO();
        InscripcionDAO dins=new InscripcionDAO();            //creo PK con los datos nuevo 
        Grupo grbd=dg.read(pk);                         //tomo de la bd al grupo nuevo
        if(grbd==null)                            //verifico si el grupo existe
            return"El grupo no existe";//Dado que no existe se manda un error: Grupo inválido-no existe   
        int aux =dins.validaInscripcion(alu.getNoCuenta(), pk.getIdAsignatura()); //obtengo el IDinscripcion del grupo viejo
        if (aux == -1)                                       //verifico si ya lo ha dado de alta
            return"No has dado de alta la materia";                                       //no estas inscrito
                
        Inscripcion ins=dins.read(aux);                                  //guardo en ins el registro del grupo viejo
        GrupoPK pk2=new GrupoPK(ins.getIdGrupo(),ins.getIdAsignatura());//creo grupo viejo
        //ins.setIdAsignatura(asignatura);
        Grupo grbd2= dg.read(pk2);
        ins.setIdGrupo(pk.getNumeroGrupo());                  //cambio en ins el grupo viejo por el nuevo
        if(grbd.getVacantes()==0)               //verifico si el grupo nuevo tiene vacantes antes de hacer le cambio definitivo
            return"NO hay vacantes en el grpo a cambiar";//No hay vacantes en el grupo a cambiar
        dins.update(ins);                       //realizo el cambio en la bd
        grbd.setVacantes((int)grbd.getVacantes()-1);
        grbd2.setVacantes((int)grbd2.getVacantes()+1);
        dg.update(grbd); //cambio las vacantes del grupo nuevo
        dg.update(grbd2);//cambio las vacantes del grupo viejo
        //dg.update(grbd); //Se registran las nuevas vacantes en el Grupo de la B.D
        
        return "Cambio exitoso";//Termina Metodo para Cambiar una Asignatura del Usuario...Te cambiaste de Grupo ;)
}
     
}